<%
/**
* 描述：数据库操作类。
*/
var DB=
{
	/**
	* 描述：常量-是否关闭数据库。
	*/
	CLOSE_CONNECTION:true,
	
	/**
	* 描述：获取实例的方法。
	*/		
	GetIntances:function()
	{
		if(DB.__Intances){
			return DB.__Intances;
		}
		else
		{
			DB.__Intances=Server.CreateObject('ADODB.Connection');
			DB.__Intances.Open(DB.__GetConfig());
			return DB.__Intances;
		}
	},
	
	/**
	* 描述：关闭数据库。
	*/		
	Close:function()
	{
		if(DB.__Intances!=null){
			DB.__Intances.Close();
		}
	},	
		
	/**
	* 描述：私有的数据库连接实例。
	*/		
	__Intances:null,
			
	/**
	* 描述：实现配置接口，获取配置数据库连接。
	*/		
	__GetConfig:function()
	{
		return Config.ConnectionString.Default.Value;
	}	
};

/**
* 描述：执行除查询之外的SQL语句。
*/		
DB.Exec=function($sql,$isCloseConnection)
{
	DB.GetIntances().Execute($sql);
	if($isCloseConnection){
		DB.Close();
	}
};

/**
* 描述：参数化执行除查询之外的SQL语句。
* @static
* @access public
* @params require $sql 
*         require $parameters 
*         oper    $isCloseConnection
* @return void
*/		
DB.PExec=function($sql,$parameters,$isCloseConnection)
{
	var command=DB.__GetCommand($sql,$parameters);
	{
		command.ActiveConnection=DB.GetIntances();
		command.Execute();			
		if($isCloseConnection){
			command.ActiveConnection.Close();
		}					
	}
	command=null;		
};

DB.Insert=function($tableName,$data)
{
	
};

DB.DeleteRowByID=function()				
{	
}

DB.UpdateRowByID=function()
{	
};

/**
* 描述：普通获取数据库行。
*/		
DB.GetRows=function($sql,$isCloseConnection)
{
	var data=null;
	{
		var recordset=Server.CreateObject('ADODB.Recordset');
		{
			recordset.ActiveConnection=DB.GetIntances();
			recordset.CursorType=1;
			recordset.LockType=1;
			recordset.Open($sql);
			if(!recordset.EOF){
				data=DB.__GetRecordsetData(recordset);
			}
			if($isCloseConnection){
				recordset.ActiveConnection.Close();
			}
			if(!$isCloseConnection){
				recordset.Close();
			}				
			recordset=null;
		}
	}
	return data;
};

/**
* 描述：参数化获取数据库行。
*/		
DB.PGetRows=function($sql,$parameters,$isCloseConnection)
{
	var data=null;
	{	
		var command=DB.__GetCommand($sql,$parameters);
		{
			command.ActiveConnection=DB.GetIntances();
			var recordset=command.Execute();
			{			
				if(!recordset.EOF){
					data=DB.__GetRecordsetData(recordset);
				}
			}
			recordset.Close(),recordset=null;
			
			if($isCloseConnection){
				command.ActiveConnection.Close();
			}					
		}
		command=null;
	}
	return data;		
};
		
/**
* 描述：获取分页数据。
*/
DB.GetData=function()
{

};

/**
* 描述：参数化获取分页数据。
*/
DB.PGetData=function()
{

};

/**
* 描述：根据主键获取数据。
*/
DB.GetRowByID=function()
{

};

/**
* 描述：根据主键获取某字段值。
*/
DB.GetValueByID=function()
{

};

/**
* 描述：最后插入的ID值。
*/	
DB.LastInsertID=function()
{
	
};

/**
* 描述：设置默认数据库。
*/		
DB.DefaultDatabase=function($databaseName)
{
	return DB.GetIntances().DefaultDatabase($databaseName);
};

/**
* 描述：开始事务。
*/			
DB.BeginTrans=function()
{
	return DB.GetIntances().BeginTrans();
};
	
/**
* 描述：提交事务。
*/				
DB.CommitTrans=function()
{
	return DB.GetIntances().CommitTrans();
};

/**
* 描述：回滚事务。
*/		
DB.RollbackTrans=function()
{
	return DB.GetIntances().RollbackTrans();
};

/**
* 描述：将传进的Recordset对象数据编排成二维数组返回。
*/				
DB.__GetRecordsetData=function($recordset)
{
	var tempData=[];
	while(!$recordset.EOF)
	{
		var index=Number(tempData.length);
		tempData[index]={};
		for(var iField=0;iField<$recordset.Fields.Count;iField++)
		{
			tempData[index][$recordset.Fields(iField).Name]=$recordset.Fields(iField).Value;
		}	
		$recordset.MoveNext();
	}		
	return tempData;
};

/**
* 描述：根据SQL语句及参数生成Command对象。
*/		
DB.__GetCommand=function($sql,$params)
{
	var cmd=Server.CreateObject('ADODB.Command');		
	cmd.CommandText=$sql;
	for(var iParams=0;iParams<$params.length;iParams++)
	{
		var parameter=Server.CreateObject('ADODB.Parameter');
		{
			parameter.Name=$params[iParams]['Name'];						//参数名称
			parameter.Value=$params[iParams]['Value'];						//参数值
			parameter.Type=$params[iParams]['Type'];						//参数类型
											
			if($params[iParams]['Size']){									//指示参数大小
				parameter.Size=$params[iParams]['Size'];
			}	
					
			if($params[iParams]['Direction']){								//指示参数类型
				parameter.Direction=$params[iParams]['Direction'];
			}
			else{
				parameter.Direction=0x0001;
			}						
					
			if($params[iParams]['Attributes']){								//指示参数特性
				parameter.Attributes=$params[iParams]['Attributes'];
			}						
					
			if($params[iParams]['NumericScale']){							//指示数字值范围
				parameter.NumericScale=$params[iParams]['NumericScale'];
			}								

			if($params[iParams]['Precision']){								//指示参数精度
				parameter.Precision=$params[iParams]['Precision'];
			}
			
			if($params[iParams]['Chunk']){									//将数据追加到参数对象
				parameter.AppendChunk($params[iParams]['Chunk']);
			}
			cmd.Parameters.Append(parameter);				
		}
		parameter=null;
	}
	return cmd;
};
%>